package com.cnap.service;

import com.cnap.db.entity.MicroServicePO;
import com.cnap.model.cloud.scaling.UpdateScalingParam;
import com.cnap.model.common.PageResult;
import com.cnap.model.schedule.DistributeParam;
import com.cnap.model.schedule.MicroServiceVO;
import com.cnap.model.schedule.QueryMicroServiceParam;
import com.cnap.model.schedule.UpdateMicroServiceStatusParam;
import com.cnap.model.schedule.UpdateMicroserviceClusterParam;
import com.cnap.model.schedule.UpdateUserChooseParam;
import com.cnap.model.schedule.ValidateParam;

import java.util.List;

/**
 * 微服务
 *
 * @author xc
 **/
public interface MicroSvcService {

    /**
     * 分解微服务
     *
     * @param applicationId 应用id
     */
    void splitMicroServices(String applicationId);

    /**
     * 分页查询
     *
     * @param queryMicroServiceParam 参数
     * @return 结果
     */
    PageResult<MicroServiceVO> findByPage(QueryMicroServiceParam queryMicroServiceParam);


    /**
     * 根据应用id删除啊微服务信息和策略信息
     *
     * @param applicationId 应用id
     */
    void deleteMicroServiceAndStrategyWithAppId(String applicationId);

    /**
     * 根据服务id获取yaml
     *
     * @param serviceId serviceId
     * @return yaml
     */
    String getYamlByServiceId(String serviceId);

    /**
     * 验证
     *
     * @param validateParam 参数
     * @return 结果
     */
    boolean validate(ValidateParam validateParam);

    /**
     * 根据应用id查询微服务信息
     *
     * @param applicationId 应用id
     * @return 结果
     */
    List<MicroServiceVO> selectMicroServicesByAppId(String applicationId);

    /**
     * 部署微服务
     *
     * @param distributeParam 参数
     * @return 结果
     */
    boolean distribute(DistributeParam distributeParam);


    /**
     * 更新微服务状态
     *
     * @param param 参数
     * @return 结果
     */
    boolean updateMicroServiceStatus(UpdateMicroServiceStatusParam param);

    /**
     * 根据应用id删除微服务镜像
     *
     * @param applicationId 应用id
     * @return 结构
     */
    boolean deleteMicroServiceImagesWithAppId(String applicationId);

    /**
     * 更新部署集群信息
     *
     * @param param 参数
     * @return 结果
     */
    boolean updateClusterInfo(UpdateMicroserviceClusterParam param);

    /**
     * 根据服务id查询微服务信息
     *
     * @param serviceId 服务id
     * @return 结果
     */
    MicroServicePO getMicroserviceBySvcId(String serviceId);

    /**
     * 更新用户选择
     *
     * @param param 参数
     */
    void updateUserChooseCloud(UpdateUserChooseParam param);

    /**
     * 更新虚机扩缩容策略
     *
     * @param updateScalingParam 参数
     */
    void updateScalingPolicy(UpdateScalingParam updateScalingParam);
}
